package com.tanhua.domain.mongo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.bson.types.ObjectId;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.geo.GeoJsonPoint;
import org.springframework.data.mongodb.core.index.CompoundIndex;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;

import java.io.Serializable;

/**
 * user_location表的实体类
 * 注意：类里有GeoJsonPoint，是不能使用hessian反序列化的
 *
 * dubbo框架默认采用hessian框架进行序列化，相比jdk的序列化技术
 *  hessian的：更灵活，效率更高
 *  jdk的：更安全，效率低
 * hessian对一些字节码数据反序列化时，会查找类的参数最少的构造方法。如果有参数，先给null值或默认值
 *   GeoJsonPoint(Point point)
 *
 * @author liuyp
 * @date 2021/01/31
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Document(collection = "user_location")
//复合索引，索引名称是location_index，针对location字段加的索引， 索引类型是2dsphere，是2维的球面地理空间索引
@CompoundIndex(name = "location_index", def = "{'location':'2dsphere'}")
public class UserLocation implements Serializable {
    /**主键值*/
    @Id
    private ObjectId id;
    /**用户id*/
    @Indexed
    private Long userId;
    /**地理位置坐标， 经度，纬度*/
    private GeoJsonPoint location;
    /**地理位置名称*/
    private String address;
    /**创建时间*/
    private Long created;
    /**修改时间*/
    private Long updated;
    /**最后一次修改时间*/
    private Long lastUpdated;
}